function math_block(state, startLine, endLine, silent) {
  let pos = state.bMarks[startLine] + state.tShift[startLine];
  let max = state.eMarks[startLine];

  // 检查行首是否为 $$
  if (state.src.slice(pos, pos + 2) !== '$$') return false;

  // 可选：检查是否紧跟换行符或空格
  pos += 2;
  let firstLine = state.src.slice(pos, max).trim();
  if (firstLine === '') {
    // 处理空第一行的情况
    pos = state.skipEmptyLines(startLine + 1);
  } else {
    // 第一行有内容，即为公式内容的一部分
    pos = startLine;
  }

  let nextLine = pos;

  // 寻找结束的 $$
  for (;;) {
    if (nextLine >= endLine) return false; // 没有找到结束符

    pos = state.bMarks[nextLine] + state.tShift[nextLine];
    max = state.eMarks[nextLine];

    if (state.src.slice(pos, max).trim() === '$$') {
      // 找到结束符
      break;
    }

    nextLine++;
  }

  if (silent) return true; // 预扫描成功

  // 创建 token
  let token = state.push('math_block', 'math', 0);
  token.block = true;
  token.markup = '$$';
  token.content = state.getLines(startLine, nextLine, state.tShift[startLine], true).trim(); // 获取内容

  // 更新 state.line，跳过已处理的行
  state.line = nextLine + 1;

  return true;
}

function plugin(md) {
  // 注册块级规则
  md.block.ruler.after('fence', 'math_block', math_block, {
    // alt: [ 'paragraph', 'reference', 'blockquote' ] // 可选：指定在哪些环境下也尝试匹配
  });

  // 注册渲染器
  md.renderer.rules.math_block = function (tokens, idx) {
    return '<div class="math-block">\\[' + tokens[idx].content.replace('$$', '') + '\\]</div>';
    // 注意：replace('$$', '') 可能需要更精确的处理，取决于你如何存储 content
    // 最好是在解析阶段就去除 $$ 标记
  };
}

export { plugin as default };